package com.zen.lon.open.remote.annotation;

import com.zen.lon.open.proxy.ProxyAgent;
import com.zen.lon.open.remote.condition.DefaultProxyCondition;
import com.zen.lon.open.remote.condition.ProxyCondition;
import com.zen.lon.open.remote.sign.DefaultInvokeSign;
import com.zen.lon.open.remote.sign.RemoteInvokeSign;
import com.zen.lon.open.remote.support.RemoteClientProxyAgentMethodInvoker;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author ZonLen since on 2021/6/29 上午9:25
 */
@Inherited
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ProxyAgent(proxyMethodInvoker = RemoteClientProxyAgentMethodInvoker.class)
public @interface RemoteClient {

  /**
   * 服务端地址 ip:prot、http://ip:prot、https://ip:prot 三种格式
   */
  String address();

  /**
   * 服务端的 context-path
   */
  String serverContextPath() default "";

  /**
   * 接口请求头签名 默认为OPEN方式加签
   */
  Class<? extends RemoteInvokeSign> remoteSign() default DefaultInvokeSign.class;

  /**
   * 代理条件，默认代理
   */
  Class<? extends ProxyCondition> proxyCondition() default
      DefaultProxyCondition.class;


}
